
/**
 * 实现函数防抖
 * 该函数会从上一次被调用后，延迟 wait 毫秒后调用 callback
 * @param {*} callback 
 * @param {*} time 
 * @returns 
 */
 export function functionDebounce(callback, time) {
  // 定时器变量
  let timeId = undefined
  // 返回一个函数
  return function (e) {
    if (timeId !== undefined) {
      // 清空定时器
      clearTimeout(timeId)
    }
    // 启动定时器
    timeId = setTimeout(() => {
      // 执行回调
      callback.call(this, e)
      // 执行完了重置id
      timeId = undefined
    }, time)
  }
}

/**
 * 实现函数节流
 * @param {*} callback 
 * @param {*} wait 
 * @returns 
 */
 export function functionThrottle(callback, wait) {
  // 定义开始时间
  let start = 0
  // 返回结果是一个函数
  return function (e) {
    // 获取当前时间戳
    let now = Date.now()
    // 判断
    if (now - start >= wait) {
      // 若满足条件，则执行回调函数
      callback.call(this, e)
      // 修改开始时间
      start = now
    }
  }
}